package com.baichang.taoshunda.service;

import com.baichang.framework.excelption.ServiceException;
import com.baichang.framework.model.Page;
import com.baichang.taoshunda.entity.Bussiness;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * Created by ${wushenglu} on 2017/8/18 0018.
 */
public interface BusinessService {
    /**
     * 根据城市获取推荐商家
     *
     * @param cityId 城市编号
     * @param lat
     * @param lng    @return
     */
    List<Map<String, Object>> getRecommendBussiness(Integer cityId, String lat, String lng);

    /**
     * 查询商家列表
     *
     * @param startCreate
     * @param startTime
     * @param endTime
     * @param cityId
     * @param typeId
     * @param name
     * @param nowPage
     * @param pageSize    @return
     */
    Page queryBusinessList(String startCreate, String endCreate, String startTime, String endTime, Integer cityId, Integer typeId, String name, int nowPage, int pageSize);


    /**
     * 商家订单查询
     *
     * @param
     * @param
     * @param id
     * @param nowPage
     * @param pageSize @return
     */
    Page<Map<String, Object>> businessOrderList(Integer id, int nowPage, int pageSize);

    /**
     * 商家明细查询
     *
     * @param id
     * @param nowPage
     * @param pageSize @return
     */
    Page<Map<String, Object>> businessOrderDetails(Integer id, int nowPage, int pageSize);

    /**
     * 修改用户账号
     *
     * @param id
     * @param pwd
     * @return
     */
    int updateBusinessAccount(Integer id, String pwd);

    /**
     * 商家启用、禁用
     *
     * @param id
     * @param state
     * @return
     */
    int updateStatus(Integer id, Integer state) throws ServiceException;

    /**
     * 修改商家信息
     *
     * @param id
     * @param bussName
     * @param bussId
     * @param bussPhone
     * @param serviceTel
     * @param address
     * @param cityId
     * @param areaId
     * @param serviceLince
     * @param bussLicnese
     * @param remarks
     * @return
     */
    int updateBusinessInfo(Integer id, String bussName, Integer bussId, String bussPhone, String serviceTel, String address, Integer cityId, Integer areaId, String serviceLince, String bussLicnese, String remarks);

    /**
     * 推荐诚信商家
     *
     * @param id
     * @param isRecommend
     * @return
     */
    int updateRecommend(Integer id, Integer isRecommend, Integer state) throws ServiceException;

    /**
     * 查询审核商家
     *
     * @param businessName
     * @param account
     * @param telephone
     * @param cityName
     * @param address
     * @param nowPage
     * @param pageSize     @return
     */
    Page queryBusinessAudit(String businessName, String account, String telephone, String cityName, String address, int nowPage, int pageSize);

    /**
     * 审核商家
     *
     * @param id
     * @param audit
     * @param logo
     * @param store
     * @param shop
     * @param legalCardPic
     * @param service      @return
     * @param licnese
     */
    boolean updateAudit(Integer id, Integer audit, String reason, String logo, String store, String shop, String legalCardPic, String service, String licnese);

    /**
     * 查询商家详情
     * 接口
     * 武圣路
     *
     * @param bussId 商家编号
     * @param ulat
     * @param ulng   @return
     * @param userId
     */
    Map<String, Object> getBussinessDateial(int bussId, double ulat, double ulng, int userId) throws ServiceException;

    /**
     * 查询商家列表
     *
     * @param cityId     用户编号
     * @param ulat       经度
     * @param ulng       纬度
     * @param typeId     查询类型 1综合排序2 销量 3距离
     * @param nowPage
     * @param pageSize   @return
     * @param bussTypeId
     * @param userId
     */
    List<Map<String, Object>> getBussinessList(int cityId, double ulat, double ulng, int typeId, int nowPage, int pageSize, int bussTypeId, int userId) throws ServiceException;

    /**
     * 根据用户id 查询邀请商家列表
     *
     * @param userId   用户id
     * @param ulat     经度
     * @param ulng     纬度
     * @param nowPage
     * @param pageSize @return
     * @param
     */
    List<Map<String, Object>> getBussinessListByUserId(int userId, double ulat, double ulng, int nowPage, int pageSize) throws ServiceException;

    /**
     * 手机号登录
     * 1.判断验证码
     * 2.返回商家信息
     *
     * @param mobile 手机号
     * @param code   验证码
     * @return
     */
    Map<String, Object> mobileMsgLogin(String mobile, String code) throws ServiceException;

    /**
     * 账号密码登录
     * 1.判断账号是否存在
     * 2.判断密码是否正确
     * 3.返回商家信息
     *
     * @param account 账号
     * @param pwd     密码
     * @return
     */
    Map<String, Object> accountLogin(String account, String pwd) throws ServiceException;

    /**
     * 商家注册
     *
     * @param account             账号
     * @param code                验证码
     * @param pwd                 密码
     * @param mobile              电话号
     * @param servicePhone        业务电话
     * @param name                商家名称
     * @param area                地区
     * @param address             地址
     * @param cityId              城市编号
     * @param storePic            门头照
     * @param shopPic             店内照片
     * @param legalCardPic        法人身份证
     * @param bussLicnese         营业执照
     * @param serviceLince        服务许可证
     * @param lng                 经度
     * @param lat                 维度
     * @param legalPeople
     * @param emergenCycontact
     * @param emergencyContactTel @return
     * @param provinceId
     * @param areaId
     */
    Map<String, Object> register(String account, String code, String pwd, String mobile, String servicePhone, String name, String area, String address, Integer typeId, Integer cityId, String storePic, String shopPic, String legalCardPic, String bussLicnese, String serviceLince, String lng, String lat, String handheldPhotos, String fontCard, String reverseCard, String legalPeople, String emergenCycontact, String emergencyContactTel, Integer provinceId, Integer areaId) throws ServiceException;


    /**
     * 商家注册
     *
     * @param account             账号
     * @param mobile              电话号
     * @param servicePhone        业务电话
     * @param name                商家名称
     * @param area                地区
     * @param address             地址
     * @param cityId              城市编号
     * @param storePic            门头照
     * @param shopPic             店内照片
     * @param legalCardPic        法人身份证
     * @param bussLicnese         营业执照
     * @param serviceLince        服务许可证
     * @param lng                 经度
     * @param lat                 维度
     * @param legalPeople
     * @param emergenCycontact
     * @param emergencyContactTel @return
     * @param provinceId
     * @param areaId
     */
    Map<String, Object> authentication(String account, String mobile, String servicePhone, String name, String area, String address, Integer typeId, Integer cityId, String storePic, String shopPic, String legalCardPic, String bussLicnese, String serviceLince, String lng, String lat, String handheldPhotos, String fontCard, String reverseCard, String legalPeople, String emergenCycontact, String emergencyContactTel, Integer provinceId, Integer areaId) throws ServiceException;

    /**
     * 邀请商家注册
     *
     * @param account        账号
     * @param code           验证码
     * @param pwd            密码
     * @param registerNumber
     */
    Map<String, Object> businessregister(String account, String code, String pwd, Integer userId, Integer registerNumber) throws ServiceException;

    /**
     * 忘记密码修改密码
     *
     * @param account 账号
     * @param newPwd  新密码
     * @return
     */
    boolean updateForgetPwd(String account, String newPwd) throws ServiceException;

    /**
     * 根据编号获取商家信息
     *
     * @param id 商家编号
     * @return
     */
    Bussiness getBusinessById(Integer id) throws ServiceException;

    /**
     * 获取商家个人信息
     *
     * @param bussId 商家编号
     * @return
     */
    Map<String, Object> getBussinessInfo(Integer bussId) throws ServiceException;

    /**
     * 修改商家个人信息
     *
     * @param bussId  商家编号
     * @param headPic 头像
     * @param name    名称
     * @param hxKid
     * @param sex
     * @return
     */
    boolean updateBusinessInfo(Integer bussId, String headPic, String name, String hxKid, String sex) throws ServiceException;

    /**
     * 获取更换账号时老手机号的验证码
     *
     * @param bussId 商家编号
     * @return
     */
    boolean getChangeAccountOldMobileMsg(Integer bussId) throws ServiceException;

    /**
     * 获取更换账号时新手机号的验证码
     *
     * @param mobile 手机号
     * @return
     */
    boolean getChangeAccountNewMobileMsg(String mobile) throws ServiceException;

    /**
     * 修改账号
     *
     * @param bussId     商家编号
     * @param newAccount 账号
     * @return
     */
    boolean changeAccount(Integer bussId, String newAccount) throws ServiceException;

    /**
     * 验证密码
     *
     * @param bussId 商家编号
     * @param pwd    密码
     * @return
     */
    boolean checkPwd(Integer bussId, String pwd) throws ServiceException;

    /**
     * 修改密码
     *
     * @param bussId  商家编号
     * @param pwd     密码
     * @param surePwd 确认密码
     * @return
     */
    boolean updatePwd(Integer bussId, String pwd, String surePwd) throws ServiceException;

    /**
     * 推荐商家广告位
     *
     * @param id
     * @param cityId
     * @param isPosition
     * @param storePic
     * @param carouselId
     * @return
     */
    int updateIsPosition(Integer id, Integer cityId, Integer isPosition, Integer state, String storePic, Integer carouselId) throws ServiceException;

    /**
     * 查询推荐商家
     *
     * @param name
     * @param cityName
     * @param nowPage
     * @param pageSize @return
     */
    Page queryRecommendBusiness(String name, String cityName, int nowPage, int pageSize);

    /**
     * 删除推荐商家
     *
     * @param id
     * @param isRecommend
     * @return
     */
    int updateIsRecommend(Integer id, Integer isRecommend);

    /**
     * 查询推荐广告位
     *
     * @param name
     * @param cityId
     * @param nowPage
     * @param pageSize @return
     */
    Page queryRecommendAdv(String name, Integer cityId, int nowPage, int pageSize);

    /**
     * 查看优惠券
     *
     * @param id
     * @param nowPage
     * @param pageSize @return
     */
    Page<Map<String, Object>> examineCoupon(Integer id, int nowPage, int pageSize);

    /**
     * 查看优惠活动
     *
     * @param id
     * @return
     */
    List<Map<String, Object>> examineActivity(Integer id);

    /**
     * 修改是否营业
     *
     * @param bussId 商家编号
     * @param isOpen 是否营业
     * @return
     */
    boolean updateShopIsOpen(Integer bussId, int isOpen);

    /**
     * 搜索上家
     *
     * @param cityId     城市编号
     * @param key        关键字
     * @param ulat
     * @param ulng       @return
     * @param bussTypeId
     * @param nowPage
     * @param pageSize
     */
    List<Map<String, Object>> getBusinessByKey(int cityId, String key, double ulat, double ulng, int bussTypeId, int nowPage, int pageSize) throws ServiceException;

    /**
     * 查询未通过的商家
     *
     * @param businessName
     * @param account
     * @param telephone
     * @param cityName
     * @param address
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryNotBusiness(String businessName, String account, String telephone, String cityName, String address, int nowPage, int pageSize);

    /**
     * 修改商家的背景图片
     *
     * @param bussId        商家编号
     * @param backgroundPic 背景图片
     * @return
     */
    boolean updateBussinessBackgroundPic(Integer bussId, String backgroundPic);

    /**
     * 查询商家优惠活动
     *
     * @param businessName
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryBusinessActivity(String businessName, int nowPage, int pageSize);

    /**
     * 根据城市查询商家
     *
     * @param id
     * @return
     */
    List<Map<String, Object>> queryBusinessCity(Integer id);

    /**
     * 修改商家余额并添加账单
     *
     * @param bussId      商家编号
     * @param money       余额
     * @param orderNumber
     * @param refunds
     * @return
     */
    boolean updateBussinessBalance(Integer bussId, Double money, Integer sourceType, String orderNumber, int refunds) throws ServiceException;

    /**
     * 查看商家详情
     *
     * @param id 商家编号
     * @return
     */
    Map<String, Object> getBussDetails(Integer id) throws ServiceException;

    /**
     * 修改商家详情信息
     *
     * @param id               商家编号
     * @param startTime        开始时间
     * @param endTime          结束时间
     * @param phone            电话
     * @param cityId           城市编号
     * @param address          地址
     * @param lat              纬度
     * @param lng              经度
     * @param isDispatching    是否有配送费
     * @param isInvoice
     * @param storePic
     * @param shopPic          @return
     * @param provinceId
     * @param areaId
     * @param otherLicenses
     * @param otherLicensesTwo
     * @param bussLicnese
     * @param serviceLince
     */
    boolean updateBussDetails(Integer id, String startTime, String endTime, String phone, String area, Integer cityId, String address, String lat, String lng, Integer isDispatching, String isInvoice, String storePic, String shopPic, Integer provinceId, Integer areaId, String otherLicenses, String otherLicensesTwo, String bussLicnese, String serviceLince);

    /**
     * 通过地址获取商家
     *
     * @param cityId     城市编号
     * @param address
     * @param bussTypeId
     * @param nowPage
     * @param pageSize   @return
     * @param ulng
     * @param ulat
     */
    Map<String, Object> getBusinessByAddress(int cityId, String address, int bussTypeId, int nowPage, int pageSize, double ulng, double ulat) throws ServiceException;

    /**
     * Pc端
     *
     * @param cityId
     * @param key
     * @param ulat
     * @param ulng
     * @param bussTypeId
     * @param nowPage
     * @param pageSize
     * @param address
     * @return
     */
    Map<String, Object> getBusinessByKeyPc(int cityId, String key, double ulat, double ulng, int bussTypeId, int nowPage, int pageSize, String address) throws ServiceException;

    /**
     * PC端
     *
     * @param cityId
     * @param ulat
     * @param ulng
     * @param typeId
     * @param nowPage
     * @param pageSize
     * @param bussTypeId
     * @param userId
     * @return
     */
    Map<String, Object> getBussinessListPc(int cityId, double ulat, double ulng, int typeId, int nowPage, int pageSize, int bussTypeId, int userId) throws ServiceException;

    /**
     * @param ulat
     * @param ulng
     * @param bussId
     * @param isFree
     * @return
     */
    Map<String, Object> getDispatching(double ulat, double ulng, int bussId, int isFree) throws ServiceException;

    /**
     * 推荐商家审核
     *
     * @param nowPage
     * @param pageSize
     * @param businessName
     * @return
     */
    Page queryAuditingBusiness(int nowPage, int pageSize, String businessName);

    /**
     * 同意推荐商家审核
     *
     * @param id
     * @param picture
     * @return
     */
    int replaceBusinessPicture(Integer id, String picture);

    /**
     * 配送费
     *
     * @param busId
     * @param distance
     * @return
     * @throws ServiceException
     */
    double getDispatching(int busId, BigDecimal distance, Integer isFree) throws ServiceException;

    /**
     * @param id
     * @param picture
     * @return
     */
    int updatePic(Integer id, String picture);

    /**
     * 添加设置提现密码
     *
     * @param bussId
     * @param cashPwd
     * @return
     */
    boolean addCashPwd(Integer bussId, String cashPwd);

    /**
     * @param bussId
     * @return
     */
    Map<String, Object> getCashPwd(Integer bussId);

    /**
     * 订单商品详细
     *
     * @param orderNumber
     * @param nowPage
     * @param pageSize    @return
     */
    Page businessOrderDetail(String orderNumber, int nowPage, int pageSize);

    /**
     * 添加商家冻结金额
     *
     * @param sellerId
     * @param money
     */
    void updateFreezeMoney(Integer sellerId, double money);

    /**
     * 查询该分类下是否存在未禁用的商家
     *
     * @param id
     * @return
     */
    int getCompanyCountByTypeId(Integer id);

    /**
     * @param userId
     * @return
     */
    Integer getRebateCount(Integer userId);

    /**
     * 功能描述:
     * 只是添加商家账单记录
     *
     * @param sellerId        商家编号
     * @param companyGetMoney 商家获得金额
     * @param sourceType      账单类型    订单完成(1), 退货(2), 提现(3);
     * @param orderNumber     订单号
     * @param refunds         是否支持七天无理由退货
     * @return:
     * @auther: wsl
     * @date: 2019/1/29 10:06
     */
    boolean saveCompanyBalance(Integer sellerId, double companyGetMoney, Integer sourceType, String orderNumber, int refunds) throws ServiceException;

    /**
     * 功能描述:
     *
     * @param companyId           商家编号
     * @param area                地区
     * @param provinceId          省份编号
     * @param registerNumber      注册步数
     * @param servicePhone        服务电话
     * @param name                商家名称
     * @param address             商家地址
     * @param cityId              市级编号
     * @param areaId              区级编号
     * @param typeId              商家类型编号
     * @param lat                 商家纬度
     * @param lng                 商家经度
     * @param legalPeople         法人
     * @param emergencyContact    紧急联系人
     * @param emergencyContactTel 紧急联系人电话
     * @return:
     * @auther: wsl
     * @date: 2019/2/26 8:32
     */

    Map registerSecondStep(Integer companyId, String area, Integer provinceId, Integer registerNumber, String servicePhone, String name, String address, Integer cityId, Integer areaId, Integer typeId, String lat, String lng, String legalPeople, String emergencyContact, String emergencyContactTel);

    /**
     * 功能描述: 商家注册第三步
     *
     * @param companyId      商家编号
     * @param registerNumber 注册步数
     * @param storePic       商家编号
     * @param shopPic        商家编号
     * @param handheldPhotos 商家编号
     * @param fontCard       商家编号
     * @param reverseCard    商家编号
     * @param bussLicnese    商家编号
     * @param serviceLince   商家编号
     * @param legalCardPic   法人
     * @return:
     * @auther: wsl
     * @date: 2019/2/26 9:39
     */
    boolean registerThreeStep(Integer companyId, Integer registerNumber, String storePic, String shopPic, String legalCardPic, String handheldPhotos, String fontCard, String reverseCard, String bussLicnese, String serviceLince);
}
